package handler.risk;

import bean.command.CmdResultCode;
import bean.command.RbCmd;
import bean.orderbook.Order;
import handler.BaseHandler;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
import org.eclipse.collections.api.set.primitive.MutableLongSet;
import org.eclipse.collections.impl.map.mutable.primitive.LongObjectHashMap;
import org.eclipse.collections.impl.set.mutable.primitive.LongHashSet;
import thirdpart.order.CmdType;

@AllArgsConstructor
@Log4j2
public class ExistRiskHandler extends BaseHandler {


    @NonNull
    private final LongHashSet oidSet;


    // 发布行情
    // 新委托 0
    // 撤单   1
    // TODO:  2022/2/9 这里进行了用户和股票id的判断 但是根据构想 这些判断由上游gin服务处理 写入的订单一定是合法的
    //  但由于消息重传可能导致重复的消息 因此这里要进行的是委托单的幂等处理
    //  序列号由gin写入redis 在这里进行判断 这里则需要一个redis连接
    //  还有一种方案是 初始化一个空的集合 来一个就写入一个 这里采用第二种方法

    @Override
    public void onEvent(RbCmd cmd, long sequence, boolean endOfBatch) throws Exception {
        if(cmd.command== CmdType.NEW_ORDER){
            if(oidSet.contains(cmd.oid)) {
                cmd.resultCode = CmdResultCode.RISK_INVALID_CODE;
                return;
            } else {
              oidSet.add(cmd.oid);
            }
        }
    }
}
